IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name='spRpt_PresupuestoMovimiento' and XTYPE='P')
BEGIN
	DROP PROCEDURE [dbo].[spRpt_PresupuestoMovimiento]
END
GO
CREATE PROCEDURE [dbo].[spRpt_PresupuestoMovimiento]
	 @OP VARCHAR(32)=NULL
	,@ParamAuxiliar NVARCHAR(MAX)=NULL
	,@CodMovimiento_Ini VARCHAR(16)=NULL
	,@CodMovimiento_Fin VARCHAR(16)=NULL
	,@CodPresupuesto_Ini VARCHAR(16)=NULL
	,@CodPresupuesto_Fin VARCHAR(16)=NULL
	,@CodRubroOrigen_Ini VARCHAR(16)=NULL
	,@CodRubroOrigen_Fin VARCHAR(16)=NULL
	,@CodCentroCostoOrigen_Ini VARCHAR(16)=NULL
	,@CodCentroCostoOrigen_Fin VARCHAR(16)=NULL
	,@CodRubroDestino_Ini VARCHAR(16)=NULL
	,@CodRubroDestino_Fin VARCHAR(16)=NULL
	,@CodCentroCostoDestino_Ini VARCHAR(16)=NULL
	,@CodCentroCostoDestino_Fin VARCHAR(16)=NULL
WITH ENCRYPTION
AS
SET NOCOUNT ON;
BEGIN TRY

/*****     IMPRIMIR    *****/
IF @OP = 'Imprimir'
BEGIN

	SELECT 
		 @CodMovimiento_Ini=CASE WHEN @CodMovimiento_Ini IS NULL OR RTRIM(@CodMovimiento_Ini)='' THEN REPLICATE(' ',16) ELSE @CodMovimiento_Ini END
		,@CodMovimiento_Fin=CASE WHEN @CodMovimiento_Fin IS NULL OR RTRIM(@CodMovimiento_Fin)='' THEN REPLICATE('Z',16) ELSE @CodMovimiento_Fin END
		,@CodPresupuesto_Ini=CASE WHEN @CodPresupuesto_Ini IS NULL OR RTRIM(@CodPresupuesto_Ini)='' THEN REPLICATE(' ',16) ELSE @CodPresupuesto_Ini END
		,@CodPresupuesto_Fin=CASE WHEN @CodPresupuesto_Fin IS NULL OR RTRIM(@CodPresupuesto_Fin)='' THEN REPLICATE('Z',16) ELSE @CodPresupuesto_Fin END
		,@CodRubroOrigen_Ini=CASE WHEN @CodRubroOrigen_Ini IS NULL OR RTRIM(@CodRubroOrigen_Ini)='' THEN REPLICATE(' ',16) ELSE @CodRubroOrigen_Ini END
		,@CodRubroOrigen_Fin=CASE WHEN @CodRubroOrigen_Fin IS NULL OR RTRIM(@CodRubroOrigen_Fin)='' THEN REPLICATE('Z',16) ELSE @CodRubroOrigen_Fin END
		,@CodCentroCostoOrigen_Ini=CASE WHEN @CodCentroCostoOrigen_Ini IS NULL OR RTRIM(@CodCentroCostoOrigen_Ini)='' THEN REPLICATE(' ',16) ELSE @CodCentroCostoOrigen_Ini END
		,@CodCentroCostoOrigen_Fin=CASE WHEN @CodCentroCostoOrigen_Fin IS NULL OR RTRIM(@CodCentroCostoOrigen_Fin)='' THEN REPLICATE('Z',16) ELSE @CodCentroCostoOrigen_Fin END
		,@CodRubroDestino_Ini=CASE WHEN @CodRubroDestino_Ini IS NULL OR RTRIM(@CodRubroDestino_Ini)='' THEN REPLICATE(' ',16) ELSE @CodRubroDestino_Ini END
		,@CodRubroDestino_Fin=CASE WHEN @CodRubroDestino_Fin IS NULL OR RTRIM(@CodRubroDestino_Fin)='' THEN REPLICATE('Z',16) ELSE @CodRubroDestino_Fin END
		,@CodCentroCostoDestino_Ini=CASE WHEN @CodCentroCostoDestino_Ini IS NULL OR RTRIM(@CodCentroCostoDestino_Ini)='' THEN REPLICATE(' ',16) ELSE @CodCentroCostoDestino_Ini END
		,@CodCentroCostoDestino_Fin=CASE WHEN @CodCentroCostoDestino_Fin IS NULL OR RTRIM(@CodCentroCostoDestino_Fin)='' THEN REPLICATE('Z',16) ELSE @CodCentroCostoDestino_Fin END

	SELECT
		 t1.[CodPresupuesto] AS [PRESUPUESTO]
		,t1.[CodMovimiento] AS [CODIGO MOVIMIENTO]
		,t1.[CodRubroOrigen] AS [CODIGO RUBRO ORIGEN]
		,r1.NombreRubro AS [NOMBRE RUBRO ORIGEN]
		,t1.[CodCentroCostoOrigen] AS [CODIGO CCOSTO ORIGEN]
		,cc1.NombreCentroCosto AS [NOMBRE CCOSTO ORIGEN]
		,t1.[CodRubroDestino] AS [CODIGO RUBRO DESTINO]
		,r2.NombreRubro AS [NOMBRE RUBRO DESTINO]
		,t1.[CodCentroCostoDestino] AS [CODIGO CCOSTO DESTINO]
		,cc2.NombreCentroCosto AS [NOMBRE CCOSTO DESTINO]
		,t1.[Valor] AS [VALOR]
		,t1.[Fecha] AS [FECHA CREACION]
		,t1.[Usuario] AS [USUARIO CREACION]
		,t1.[Observaciones] AS [OBSERVACIONES]
	FROM
		[dbo].[PresupuestoMovimiento] t1
		inner join Rubro r1 on t1.CodRubroOrigen=r1.CodRubro
		inner join Rubro r2 on t1.CodRubroDestino=r2.CodRubro
		inner join CentroCosto cc1 on t1.CodCentroCostoOrigen=cc1.CodCentroCosto
		inner join CentroCosto cc2 on t1.CodCentroCostoDestino=cc2.CodCentroCosto
	WHERE
		t1.CodMovimiento BETWEEN @CodMovimiento_Ini AND @CodMovimiento_Fin
		AND t1.CodPresupuesto BETWEEN @CodPresupuesto_Ini AND @CodPresupuesto_Fin
		AND t1.CodRubroOrigen BETWEEN @CodRubroOrigen_Ini AND @CodRubroOrigen_Fin
		AND t1.CodCentroCostoOrigen BETWEEN @CodCentroCostoOrigen_Ini  AND @CodCentroCostoOrigen_Fin
		AND t1.CodRubroDestino BETWEEN @CodRubroDestino_Ini AND @CodRubroDestino_Fin
		AND t1.CodCentroCostoDestino BETWEEN @CodCentroCostoDestino_Ini  AND @CodCentroCostoDestino_Fin
		
	RETURN 0	
END

--- Si se llega a este punto es porque el @OP indicado no Existe en el Procedimiento Almacenado
IF @OP IS NOT NULL
	BEGIN
	SET @ParamAuxiliar='La Operacion "'+@OP+'" No esta definida en el Procedimiento almacenado "'+OBJECT_NAME(@@PROCID)+'", Revise!.'
	RAISERROR(@ParamAuxiliar,16,1)
	RETURN 1
END

--- CONTROLAR Y REGISTRAR LOS ERRORES
END TRY
BEGIN CATCH
	--- Recopilo la informacion del error
	DECLARE @ERROR_NUMBER INT=ERROR_NUMBER(),@ERROR_SEVERITY INT=ERROR_SEVERITY(),@ERROR_STATE INT=ERROR_STATE(),@ERROR_PROCEDURE VARCHAR(128)=ERROR_PROCEDURE(),@ERROR_LINE INT=ERROR_LINE(),@ERROR_MESSAGE VARCHAR(2048)=ERROR_MESSAGE()
	--- Si hay transacciones abiertas, hago un rollback, SE ENCIERRA EN UN (TRY-CATCH) PARA QUE NO SE MUESTRE EL ERROR: Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT
	IF(@@TRANCOUNT>0) BEGIN BEGIN TRY ROLLBACK TRANSACTION END TRY BEGIN CATCH END CATCH END
	--- Ejecuto el SP que controla y registra el error
	EXEC [spSeguridadMessageException] @OP='MostrarMensaje',@ERROR_NUMBER=@ERROR_NUMBER,@ERROR_SEVERITY=@ERROR_SEVERITY,@ERROR_STATE=@ERROR_STATE,@ERROR_PROCEDURE=@ERROR_PROCEDURE,@ERROR_LINE=@ERROR_LINE,@ERROR_MESSAGE=@ERROR_MESSAGE
	RETURN 1
END CATCH;
